package com.ruoyi.common.core.domain.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseIdEntity;
import com.ruoyi.common.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * 用户信息对象 w_member
 * 
 * @author lynn
 * @date 2023-08-01
 */
@Data
@ApiModel(value = "WMember", description = "用户信息对象")
public class WMember extends BaseIdEntity
{
    private static final long serialVersionUID = 1L;

    /** 用户ID */
    @ApiModelProperty("用户ID")
    private String id;

    /** 小程序oppe id */
    @Excel(name = "小程序oppe id")
    @ApiModelProperty("小程序oppe id")
    private String openId;

    /** 用户账号(手机号) */
    @Excel(name = "用户账号(手机号)")
    @ApiModelProperty("用户账号(手机号)")
    private String userName;

    /** 用户昵称 */
    @Excel(name = "用户昵称")
    @ApiModelProperty("用户昵称")
    private String nickName;

    /** 真实姓名 */
    @Excel(name = "真实姓名")
    @ApiModelProperty("真实姓名")
    private String realName;

    /** 用户类型（1充电+停车会员,2仅停车会员,3临时用户） */
    @Excel(name = "用户类型", readConverterExp = "1=停车/充电用户,2=停车会员,3=临时用户,4=会员到期")
    @ApiModelProperty("用户类型（1充电+停车会员,2仅停车会员,3临时用户）")
    private Integer memberType;

    /** 充电会员类型（1月卡，2季卡，3年卡，4会员到期） */
    @Excel(name = "充电+停车会员类型", readConverterExp = "1=月卡,2=季卡,3=年卡,4=会员到期或非会员")
    @ApiModelProperty("会员类型（1月卡，2季卡，3年卡，4会员到期）")
    private Integer vipType;

    /** 会员开始时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "会员开始时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("会员开始时间")
    private Date vipStartTime;

    /** 会员到期时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "会员到期时间", width = 30, dateFormat = "yyyy-MM-dd")
    @ApiModelProperty("会员到期时间")
    private Date vipEndTime;

    /** 头像地址 */
    @Excel(name = "头像地址")
    @ApiModelProperty("头像地址")
    private String avatar;

    /** 密码 */
    @ApiModelProperty("密码")
    private String password;

    /** 帐号状态（1正常 2黑名单） */
    @Excel(name = "帐号状态", readConverterExp = "1=正常,2=黑名单")
    @ApiModelProperty("帐号状态（1正常 2黑名单）")
    private Integer status;

    /** 用户余额 */
    @Excel(name = "用户余额")
    @ApiModelProperty("用户余额")
    private Double wallet;

    @TableField(exist = false)
    @ApiModelProperty("扣减退款金额")
    private Double refundAmount;

    private String roleId;

    @ApiModelProperty("区域ID")
    private String areaId;

    @ApiModelProperty("单元号")
    private String unitNo;

    @ApiModelProperty("充电卡号")
    private String cardNo;

    @TableField(exist = false)
    @Excel(name = "区域名称")
    @ApiModelProperty("区域名称")
    private String areaName;

    @TableField(exist = false)
    @ApiModelProperty("车辆信息")
    private WVehicle vehicle;

    /** 备注 */
    @Excel(name = "备注")
    @ApiModelProperty("备注")
    private String remark;

    /** 绑定汤姆达ID */
    @ApiModelProperty("绑定汤姆达ID")
    private String bindTomId;

    @TableField(exist = false)
    private Double vipPrice;

    /** 创建者 */
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty("创建者")
    private String createBy;

    /** 创建时间 */
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /** 更新者 */
    @TableField(fill = FieldFill.UPDATE)
    @ApiModelProperty("更新者")
    private String updateBy;

    /** 更新时间 */
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;


    public <T> QueryWrapper<T> queryWrapper(){
        QueryWrapper<T> wrapper=new QueryWrapper<>();

        wrapper.like(StringUtils.isNotEmpty(id),"m.id" , id);
        wrapper.like(StringUtils.isNotEmpty(openId),"m.open_id" , openId);
        wrapper.like(StringUtils.isNotEmpty(userName),"m.user_name" , userName);
        wrapper.like(StringUtils.isNotEmpty(nickName),"m.nick_name" , nickName);
        wrapper.like(StringUtils.isNotEmpty(areaId),"m.area_id" , areaId);
        wrapper.eq(memberType != null,"m.member_type" , memberType);
        wrapper.like(StringUtils.isNotEmpty(avatar),"m.avatar" , avatar);
        wrapper.like(StringUtils.isNotEmpty(password),"m.password" , password);
        wrapper.eq(status != null,"m.status" , status);
        wrapper.eq(wallet != null,"m.wallet" , wallet);
        wrapper.like(StringUtils.isNotEmpty(remark),"m.remark" , remark);
        wrapper.orderByDesc("m.create_time");
        return wrapper;
    }

}
